Skip to content

KV Cache 的基本原理

5.1.1 什么是KV Cache

KV Cache (Key-Value Cache)是大语言模型(LLM)推理过程中的核心优化技术。在Transformer架构的自注意力机制中,每次生成新 token时都需要计算当前 token与所有历史token的注意力分数。如果没有缓存机制,每次生成都需要重新计算所有历史token的Key和Value向量,这将导致计算复杂度随序列长度呈二次方增长。

KV Cache的核心思想是:在自回归生成过程中,缓存之前计算的Key和Value向量,避免重复计算

5.1.2 为什么需要KV Cache

计算效率分析:

在没有KV Cache的情况下,生成第 \(T\)个 token 时:

  • 需要计算 \(T\) 个token的 Query、Key 、 Value
  • 注意力计算复杂度为 \(O(T^2 \times d)\)
  • 总计算量为 \(O(T^3 \times d)\)(对于整个序列)

使用KV Cache后:

  • 只需计算1个新token的Query、Key、Value
  • 注意力计算复杂度为\(O(T \times d)\)
  • 总计算量为 \(O(T^2 \times d)\)

性能提升对比:

序列长度无KV Cache (ms)有KV Cache (ms)加速比
512125158.3x
10244802817.1x
204818905236.3x
409675209876.7x

注:以上数据基于LLaMA-7B在A100 GPU上的推理测试

5.1.3 KV Cache 的计算公式

KV Cache 的内存占用可以通过以下公式精确计算:

\(\text{KV Cache Size} = 2 \times B \times L \times H \times K \times D\)

其中:

  • 2: Key 和 Value 两个张量
  • B (Batch Size):批处理大小
  • L (Num Layers):Transformer层数
  • H (Num Heads):注意力头数量
  • K (Head Dimension):每个头的维度
  • D (Data Type Size):数据类型占用的字节数

展开说明:

latex
  对于单个token的KV Cache:
  
  ┌─────────────────────────────────────────────────────────────┐
  │                         单层单头的KV Cache                                 │
  ├─────────────────────────────────────────────────────────────┤
  │   Key:    [K_dim]   →   K_dim × D bytes                                   │
  │   Value: [K_dim]    →   K_dim × D bytes                                   │
  │                                                                           │
  │ 单层所有头: H × 2 × K_dim × D bytes                                       │
  │ 所有层:    L × H × 2 × K_dim × D bytes                                   │
  │ 整个序列:  T × L × H × 2 × K_dim × D bytes                               │
  │ 批处理:    B × T × L × H × 2 × K_dim × D bytes                           │
  └─────────────────────────────────────────────────────────────┘

简化公式(以GB为单位):

\(\text{KV Cache (GB)} = \frac{2 \times B \times L \times H \times K \times D}{1024^3}\)

常见数据类型的字节大小

数据类型字节数 (D)说明
FP324单精度浮点
FP162半精度浮点
BF162Brain浮点
INT818位整数量化
INT40.54位整数量化
FP818位浮点量化

用心记录,持续成长